﻿#pragma once
#include "Index.h"
/**
 * 位图.
 *
 * 使用二进制位上的0和1状态来表示集合中的数是否出现
 */
class BitMap
{
public:
	BitMap();
	BitMap(int maxNum);

	/**
	 * 位图所能表示的最大的数
	 * 位图表示的数从0开始
	 */
	int getMaxNum() const;

	/**
	 * 获取使用的字节数
	 */
	int getBytesSize() const;

	/**
	 * 设置能在位图出现的最大的正整数
	 */
	void setMaxNum(int maxNum);

	/**
	 * 设置一个数在位图中是否出现
	 */
	void setNumFlag(int num,bool flag);

	/**
	 * 获取一个数在位图中是否出现的标识
	 */
	bool getNumFlag(int num);

	/**
	 * 清除当前位图中所有的标识信息
	 */
	void resetFlags();
private:
	//从左到右上每个字节上的比特位表示从小到大的数是否出现
	std::vector<byte_8> _bytes;
};
